Serial Attached SCSI (Small Computer System Interface), or SAS, is a connection-oriented protocol that allows storage devices, such as servers and disk drives, to communicate through a network of high-speed serial physical interconnects. The SAS standard was developed by the ANSI INCITS10 group.
The SAS standard defines three transport level protocols, which are used in a SAS topology under different circumstances: Serial SCSI Protocol (SSP) to transport SCSI commands, Serial Management Protocol (SMP) to transport management commands, and Serial Advanced Technology Attachment Tunnelling Protocol (STP) to transport serial Advanced Technology Attachment (ATA) commands between storage devices. The protocol is intended to be used in conjunction with SCSI and ATA command sets.
Connections between a host device and a target drive are managed by intermediate devices called expanders. SAS expanders are part of the service delivery subsystem, and act as connection management agents, or a switch fabric, having physical connections to multiple host devices or disk drives simultaneously. Devices connect to an expander across physical links attached to ports on the device and the expander. In SAS, a physical link is typically a set of four signal lines used as two differential pairs. A phy is a transceiver that electrically interfaces with a physical link, combined with the portions of the protocol that encode data and manage the reset sequences. A port is created when one or more phys share the same address and attach to a device through one or more physical links.
Multiple SAS end devices and SAS expander devices can be connected together to form a SAS domain topology. According to the SAS standard, expanders can only have ports in one domain. There can be one or multiple physical links connecting each pair of neighbouring devices. When there is a single physical link between two devices, the associated phy on the SAS device is called a narrow port. When there are multiple physical links connecting two devices, the associated phys on an expander are considered to be a wide port. In other words, all links of a wide port are considered to form a common logical link from a routing perspective, although they allow multiple simultaneous connections to pass through the wide port at the same time. The SAS protocol provides unlimited access to all resources attached to the domain, since it is designed for a trusted environment where traffic isolation and access control in a SAS domain is not needed. However, there are many application environments where traffic isolation and/or controlled access may be desirable to protect against unauthorized access or interference between unintended devices in a physical domain.
The SAS protocol uses broadcast primitives to communicate asynchronous events amongst SAS devices. The standard defines eight types of broadcast primitives, or special control Dwords, that are transmitted into the physical link to communicate up to eight types of asynchronous events, such as topology changes. The broadcast primitives are handled by a SMP target port contained within the expander. Expanders provide unrestricted access to the SMP target, giving unrestricted control of the expander to any other device within the domain. A primitive is fundamentally different from a packet. A packet is typically a multi-byte data structure containing some type of code for delineation of start of packet and end of packet, a header containing address information, data payload and checksum. Except for an identification of the type of event, the broadcast primitive does not carry any additional information such as source address, destination address, or time to live.
When a SAS expander receives a broadcast primitive, the primitive is propagated to all the phys of the expander except for the source phy, and other phys on the same port at which the original broadcast primitive was received. When an end device receives a broadcast primitive, it notifies the upper layer of the occurrence of the asynchronous event as indicated by the primitive type, but does not further propagate the primitive. Thus, when a broadcast primitive is injected into a SAS topology, the primitive propagates to all devices connected by the topology, including all end devices and expander devices.
A valid SAS topology cannot contain a loop, i.e. there can be only one logical path, considering all links of a wide port to be a single link, to traverse the topology from any device to any other device. Furthermore, within a SAS physical domain, there is no mechanism to limit the exchange of information to isolate any device from any other device.
Limiting SAS topology in each domain to be loop-free (i.e. a spanning tree) is of importance from a primitive broadcast perspective. In a topology with a loop, the primitive broadcast mechanism in the expanders will cause infinite circulation of broadcast primitives along the loop path. When a broadcast primitive reaches an expander in the loop path, it will multiply itself to other links on that expander as well. The end result is the link bandwidth on the entire topology can be consumed by infinite repetition of the broadcast primitive, making the topology unusable for transporting data or control traffic. Thus, a loop in a SAS domain topology can cause and infinite broadcast storm.
The spanning tree bridging protocol provides a Layer 2 bridging control protocol that discovers physical loops that may exist in a physical topology and selectively disables some switch ports to reduce the logical topology to provide a spanning tree topology that does not contain loops. However, in so doing, these switch ports are also disabled for transporting useful data traffic.
It is, therefore, desirable to provide a broadcast method and system that can be implemented in SAS domains that contain loops, preferably without disabling ports. It is also desirable to provide a broadcast filtering method and system that permits isolation, or segregation, of certain devices within the domain.